package utilitario;

import br.edu.unipampa.campeonato.Campeonato;
import br.edu.unipampa.campeonato.MercadoDeTransferencias;
import br.edu.unipampa.campeonato.PartidaDeFutebol;
import br.edu.unipampa.clube.Clube;
import br.edu.unipampa.clube.Tecnico;
import java.util.Scanner;

public class EntradaDeDados {

    private Scanner teclado;
    private String escolha;
    private boolean fimDeJogo;

    public EntradaDeDados() {
        teclado = new Scanner(System.in);
        fimDeJogo = false;
    }

    public String menu(Tecnico tecnico, PartidaDeFutebol partida, MercadoDeTransferencias mercado, Campeonato camp) {
        System.out.println("\nTecle '1' para *consultar os jogadores de seu clube* \nTecle '2' para *escalar o time* \nTecle '3' para *ver equipe"
                + " rival do proximo jogo* \nTecle '4' para *ir para a partida* \nTecle '5' para *consultar o mercado de transferencias* "
                + "\nTecle '6' para *comprar jogador* \nTecle '7' para *vender jogador* \nTecle '8' para *ver tabela do campeonato*");
        setEscolha(getTeclado().next());
     
        switch (getEscolha()) {
            case "1":
                tecnico.consultarJogadoresDoClube();
                return menu(tecnico, partida, mercado, camp);
            case "2":
                int numTitular,
                numReserva = 0;
                tecnico.escalarTime();
                numTitular = Integer.parseInt(escolherJogadorTitular());
                numReserva = Integer.parseInt(escolherJogadorReserva());
                tecnico.substituirNaEscalacao(numTitular, numReserva);
                return menu(tecnico, partida, mercado, camp);
            case "3":
                tecnico.consultarJogadoresDoClube(tecnico.getClubeQueDirige().getClubeQueEnfrenta());
                return menu(tecnico, partida, mercado, camp);
            case "4":
                while (camp.getNumeroDaRodada() != 8) {
                   if(camp.getNumeroDaRodada() == 1){
                      camp.tabelaPrimeiraRodada(partida, this);
                      return menu(tecnico, partida, mercado, camp);
                   }else if(camp.getNumeroDaRodada() == 2){
                       camp.tabelaSegundaRodada(partida, this); 
                       return menu(tecnico, partida, mercado, camp);
                    }else if(camp.getNumeroDaRodada() == 3){
                        camp.tabelaTerceiraRodada(partida, this);
                        return menu(tecnico, partida, mercado, camp);
                    }else if(camp.getNumeroDaRodada() == 4){
                        camp.tabelaQuartaRodada(partida, this);
                        return menu(tecnico, partida, mercado, camp);
                    }else if(camp.getNumeroDaRodada() == 5){
                        camp.tabelaQuintaRodada(partida, this);
                        return menu(tecnico, partida, mercado, camp);
                    }else if(camp.getNumeroDaRodada() == 6){
                        camp.tabelaSextaRodada(partida, this);
                        return menu(tecnico, partida, mercado, camp);
                    }else{
                        camp.tabelaSetimaRodada(partida, this);
                        return menu(tecnico, partida, mercado, camp);
                    }
                }
                   System.out.println("********* Não há mais jogos!!! Fim da Temporada *********");
                   fimDeJogo = true;
                   if(fimDeJogo == true){
                       String print = "";
                       for (int i = 0; i < camp.getClubes().size(); i++) {
                           if(camp.getClubes().get(i).getPontos() > camp.getClubes().get(i+1).getPontos()){
                               camp.getClubes().add(i+1, camp.getClubes().get(i));
                               print = camp.getClubes().get(i).getNome();
                           }
                       }
                       System.out.println(print+"Campeão do "+camp.getNome()+" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                       System.exit(0);
                   }
                
                return menu(tecnico, partida, mercado, camp);
            case "5":
                tecnico.consultarMercado(mercado);
                return menu(tecnico, partida, mercado, camp);
            case "6":
                System.out.println("\nDigite o nome do jogador que deseja comprar: ");
                setEscolha(getTeclado().next());
                tecnico.comprarJogador(mercado, getEscolha());
                return menu(tecnico, partida, mercado, camp);
            case "7":
                System.out.println("\nDigite o nome do jogador que deseja vender: ");
                setEscolha(getTeclado().next());
                String temp = getEscolha();
                System.out.println("\nDigite o numero correspondente ao clube em que o jogador será vendido");
                Clube c = mostraEquipes(camp);

                setEscolha(getTeclado().next());
                tecnico.venderJogador(temp, c);
                return menu(tecnico, partida, mercado, camp);
            case "8":
                camp.tabelaDeClassificacao();
                return menu(tecnico, partida, mercado, camp);
            default:
                System.out.println("\nDigito Inválido!!! Tecle novamente");
                return menu(tecnico, partida, mercado, camp);
        }
    }

    public String definirClube(Campeonato campeonato) {
        System.out.println("**************************** Bem Vindo ao FootBall Manager ES *****************************");
        System.out.println("--------- A primeira coisa a fazer é definir qual clube você irá treinar --------");
        for (int i = 0; i < campeonato.getClubes().size(); i++) {
            System.out.println(i + " - " + campeonato.getClubes().get(i).getNome() + " ------- Grana R$:" + campeonato.getClubes().get(i).getDinheiroEmCaixa()
                    + " Força Média: " + campeonato.getClubes().get(i).getForcaMedia());
        }
        setEscolha(getTeclado().next());
        switch (getEscolha()) {
            case "0":
                System.out.println("\nParabéns!! Você é o novo técnico do Barcelona");
                return getEscolha();
            case "1":
                System.out.println("\nParabéns!! Você é o novo técnico do Real Madrid");
                return getEscolha();
            case "2":
                System.out.println("\nParabéns!! Você é o novo técnico do Atletico de Madrid");
                return getEscolha();
            case "3":
                System.out.println("\nParabéns!! Você é o novo técnico do Valencia");
                return getEscolha();
            case "4":
                System.out.println("\nParabéns!! Você é o novo técnico do Real Sociedad");
                return getEscolha();
            case "5":
                System.out.println("\nParabéns!! Você é o novo técnico do VillaReal");
                return getEscolha();
            case "6":
                System.out.println("\nParabéns!! Você é o novo técnico do Real Betis");
                return getEscolha();
            case "7":
                System.out.println("\nParabéns!! Você é o novo técnico do Osasuna");
                return getEscolha();
            default:
                System.out.println("\nDigito Inválido!!! Tecle novamente");
                return definirClube(campeonato);
        }
    }

    public String escolherJogadorTitular() {
        String escolheJogadorTimeTitular;
        System.out.println("\nDigite o numero do jogador do time 'TITULAR' que deseja substituir: ");
        escolheJogadorTimeTitular = getTeclado().next();
        switch (escolheJogadorTimeTitular) {
            case "0":
                return escolheJogadorTimeTitular;
            case "1":
                return escolheJogadorTimeTitular;
            case "2":
                return escolheJogadorTimeTitular;
            case "3":
                return escolheJogadorTimeTitular;
            case "4":
                return escolheJogadorTimeTitular;
            case "5":
                return escolheJogadorTimeTitular;
            case "6":
                return escolheJogadorTimeTitular;
            case "7":
                return escolheJogadorTimeTitular;
            case "8":
                return escolheJogadorTimeTitular;
            case "9":
                return escolheJogadorTimeTitular;
            case "10":
                return escolheJogadorTimeTitular;
            default:
                System.out.println("Digite um valor válido!!!");
                return escolherJogadorTitular();
        }

    }

    public String escolherJogadorReserva() {
        String escolheJogadorTimeReserva;
        System.out.println("\nDigite o numero do jogador do time 'RESERVA' que deseja substituir: ");
        escolheJogadorTimeReserva = getTeclado().next();
        switch (escolheJogadorTimeReserva) {
            case "0":
                return escolheJogadorTimeReserva;
            case "1":
                return escolheJogadorTimeReserva;
            case "2":
                return escolheJogadorTimeReserva;
            case "3":
                return escolheJogadorTimeReserva;
            case "4":
                return escolheJogadorTimeReserva;
            case "5":
                return escolheJogadorTimeReserva;
            case "6":
                return escolheJogadorTimeReserva;
            case "7":
                    return escolheJogadorTimeReserva;
            default:
                System.out.println("Digite um valo válido!!!");
                return escolherJogadorReserva();
        }
    }

    public Clube mostraEquipes(Campeonato camp) {
        for (int i = 0; i < camp.getClubes().size(); i++) {
            System.out.println(i + " - " + camp.getClubes().get(i).getNome() + "\n");
        }
        setEscolha(getTeclado().next());
        switch (getEscolha()) {
            case "0":
                return camp.getClubes().get(0);
            case "1":
                return camp.getClubes().get(1);
            case "2":
                return camp.getClubes().get(2);
            case "3":
                return camp.getClubes().get(3);
            case "4":
                return camp.getClubes().get(4);
            case "5":
                return camp.getClubes().get(5);
            case "6":
                return camp.getClubes().get(6);
            case "7":
                return camp.getClubes().get(7);
            default:
                System.out.println("Invalido");
                return null;
        }

    }

    public Scanner getTeclado() {
        return teclado;
    }

    public void setTeclado(Scanner teclado) {
        this.teclado = teclado;
    }

    public String getEscolha() {
        return escolha;
    }

    public void setEscolha(String escolha) {
        this.escolha = escolha;
    }

    public boolean isFimDeJogo() {
        return fimDeJogo;
    }

    public void setFimDeJogo(boolean fimDeJogo) {
        this.fimDeJogo = fimDeJogo;
    }

    
}
